Interaktive Liste mit Ordnerstruktur

Mit der richtigen Technik können Sie eine interaktive Liste mit einer Ordnerstruktur bauen. Hier sehen Sie, wie das geht.

Das folgende Programm liest Tabellennamen und die dazugehörigen Feldname in eine interne Tabelle und gibt dann die Tabellennamen aus.

Mit einem Klick auf das Ordner-Symbol können dann die Felder zu der Tabelle angezeigt werden. Mit einem erneuten Klick auf den — nun offen dargestellten — Ordner, werden die Felder wieder ausgeblendet.

Die Anwendungsmöglichkeiten sind vielfältig: Anzeige von Aufträgen und deren Positionen, Stücklisten und die dazugehörigen Komponenten, etc.

So sieht’s aus


Die selektierten Tabellen


Zu “aufgeklappten” Tabellen werden die Felder gezeigt

Programm

REPORT zzliste10 NO STANDARD PAGE HEADING.

*– Icons bekannt machen
TYPE-POOLS icon.

*– Variablen
DATA:
*— GET CURSOR
  feldname(30),

*— Aktuelle Listzeile
  staro   TYPE systaro,

*– “Kopf-Tabelle” mit Tabellennamen
  BEGIN OF t_tabelle OCCURS 0,
    tabname TYPE tabname,
    anz,
  END OF t_tabelle,

*– “Positions-Tabelle” mit Feldnamen
  BEGIN OF t_felder OCCURS 0,
    tabname TYPE tabname,
    fldname TYPE fieldname,
  END OF t_felder.

*– Selektionsbild
SELECT-OPTIONS s_table FOR t_tabelle-tabname DEFAULT ‘ED*’ OPTION CP.

*– Programmstart
START-OF-SELECTION.

*– Alle Tabellen innerhalb der Selektion lesen
  SELECT tabname FROM dd02l
    INTO CORRESPONDING FIELDS OF TABLE t_tabelle
  WHERE tabname IN s_table
    AND tabclass = ‘TRANSP’.
*— Und die Felder dazu
  SELECT tabname fieldname FROM dd03l INTO TABLE t_felder
    FOR ALL ENTRIES IN t_tabelle WHERE tabname = t_tabelle-tabname.

*– Tabellen ausgeben
  PERFORM liste.


*– Bei Doppelklick
AT LINE-SELECTION.

*– Feldnamen ermitteln
  GET CURSOR FIELD feldname.

*– Aktuelle Zeile merken
  staro = sy-staro.

*– Nur weiter, wenn auch auf eine Zeile geklickt wurde, in der eine
*– Tabelle steht:
  IF NOT t_tabelle-tabname IS INITIAL.
*– Tabellen lesen
    READ TABLE t_tabelle WITH KEY tabname = t_tabelle-tabname.
    IF sy-subrc = 0.
*– Sollen Felder der Tabelle angezeigt werden??
      IF t_tabelle-anz = space.
*– Nein, dann aber jetzt!
        t_tabelle-anz = ‘X’.
      ELSE.
*– Ja; jetzt nicht jedoch nicht mehr.
        t_tabelle-anz = space.
      ENDIF.
*– Tabelleneintrag merken
      MODIFY t_tabelle INDEX sy-tabix.
    ENDIF.

*– Liste erneut ausgeben
    PERFORM liste.
  ENDIF.

*———————————————————————*
*       FORM liste                                                    *
*———————————————————————*
FORM liste.

*– Keine Verzweigungsliste erzeugen
  sy-lsind = 0.

*– Tabellennamen ausgeben
  LOOP AT t_tabelle.

    IF t_tabelle-anz = space.
*– Feldnamen sollen nicht angezeigt werden
      WRITE: / icon_closed_folder AS ICON HOTSPOT.
    ELSE.
*– Feldnamen anzeigen
      WRITE: / icon_open_folder AS ICON HOTSPOT.
    ENDIF.
*– Ausgabe des Tabellennamens
    WRITE: t_tabelle-tabname.
*– Tabellenname für AT LINE-SELECTION merken
    HIDE t_tabelle-tabname.

*– Falls gewünscht: Felder zur Tabelle anzeigen
    IF t_tabelle-anz = ‘X’.
      LOOP AT t_felder WHERE tabname = t_tabelle-tabname.
        WRITE: /4 t_felder-fldname.
      ENDLOOP.
    ENDIF.

  ENDLOOP.

*– Variablen löschen, damit bei Doppelklick auf eine Position nicht
*– mit dem Schliessen des Tabellen-Ordners reagiert wird.
  CLEAR: t_tabelle, t_felder.

*– Cursor auf die letzte Position setzen
  SCROLL LIST TO FIRST PAGE LINE staro INDEX 1.

ENDFORM.

 

Enno Wulff